package com.heyun.controller;
/**
 * @author JX
 * @Description 合同 控制层
 * @Company
 * @date 2017年12月14日
 */
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.heyun.bean.HeyunContract;
import com.heyun.bean.PieDataContract;
import com.heyun.bean.SeriesPieContract;
import com.heyun.service.ContractService;


@Controller
@RequestMapping("/contract")
public class ContractController {
	@Autowired
	private ContractService contractService;
	
	/**
	 * @return
	 * @author CC
	 * @Description 增加整条合同数据
	 * @date 2017年12月14日
	 */
	@RequestMapping("/insertContract")
	@ResponseBody
	public String insertContract(HeyunContract contract,MultipartFile file,HttpServletRequest request){
		if (!file.isEmpty()) {
			String type = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));// 取文件格式后缀名
		    String filename = System.currentTimeMillis() + type;// 取当前时间戳作为文件名
		         String path = request.getSession().getServletContext().getRealPath("/uploadFile_contract/" + filename);// 存放位置
		         File destFile = new File(path);
	             try {
	                 // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作，不需要额外的再去关闭IO流
	               FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);// 复制临时文件到指定目录下
	             } catch (IOException e) {
	                 e.printStackTrace();
	             }
	        contract.setConFile(path);    
		} 		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		contract.setConCreatetime(sdf.format(new Date()));	
		int insertResult = 0;
		
		insertResult = contractService.insertContract(contract);
		if (insertResult!=0) {
			return "1";
		}else{
			return "0";
		}
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 查询合同数据
	 * @date 2017年12月18日
	 */
	@RequestMapping("/listContract")
	@ResponseBody
	public Map<String,Object> listContract(@RequestParam(value="currentpage",defaultValue="1") int currentpage){
		Map<String,Object> map = new HashMap<>();
		PageHelper.startPage(currentpage,5);
		List<HeyunContract> contractList = contractService.listContract();
		//使用PageInfo包装查询后的结果，只要将PageInfo交个页面就行了
		//封装了详细的分页信息，包括查询出来的数据，传入连续显示的页数
		PageInfo<HeyunContract> page = new PageInfo<HeyunContract>(contractList,5);		
		int pages = page.getPages();//总页数
		System.out.println("当前页："+currentpage);
		System.out.println("总页数："+pages);
		map.put("pages", pages);
		map.put("contractList", contractList);		
		map.put("pageInfo", page);
		for (HeyunContract heyunContract : contractList) {
			System.out.println(heyunContract.getConName()+heyunContract.getConCreatetime());
		} 
		return map;
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 条件查询合同数据
	 * @date 2017年12月25日
	 */
	@RequestMapping("/searchContract")
	@ResponseBody
	public Map<String,Object> searchContract(HeyunContract contract,int currentpage){
		Map<String,Object> map = new HashMap<>();
		Page page = PageHelper.startPage(currentpage,5);
		List<HeyunContract> contractList = contractService.listContractByUwant(contract);
		int pages = page.getPages();//总页数
		System.out.println("当前页："+currentpage);
		System.out.println("总页数："+pages);
		map.put("pages", pages);
		map.put("contractList", contractList);		
		for (HeyunContract heyunContract : contractList) {
			System.out.println(heyunContract.getConName()+heyunContract.getConCreatetime());
		}
		return map;
	}
	
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 删除合同数据
	 * @date 2017年12月19日
	 */
	@RequestMapping("/delContract")
	@ResponseBody
	public Map<String,Object> delContract(Integer contractId){
		Map<String,Object> map = new HashMap<>();
		int delResult = contractService.deleteContract(contractId);
		if (delResult!=0) {
			map.put("message", "删除成功！");
		}else{
			map.put("message","删除失败！");
		}
		return map;
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 根据Id查询合同数据
	 * @date 2017年12月20日
	 */
	@RequestMapping("/getContract")
	@ResponseBody
	public HeyunContract getContract(Integer contractId){
		HeyunContract getResult = contractService.getContract(contractId);		
		return getResult;				
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 更新合同数据
	 * @date 2017年12月18日
	 */
	@RequestMapping("/updateContract")
	@ResponseBody
	public String updateContract(HeyunContract contract){
		System.out.println("id"+contract.getContractId());
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		contract.setConLatestOpreationTime(sdf.format(new Date()));
		int updateResult = contractService.updateContract(contract);
		System.out.println(updateResult+"updateResult");
		if (updateResult!=0) {
			return "success";
		}
		return "fail";				
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 单个或批量更新合同状态
	 * @date 2017年12月21日
	 */
	@RequestMapping("/updateState")
	@ResponseBody
	public String updateState(String params){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String conLatestOpreationTime = sdf.format(new Date());
		if(params.contains("&")){
			String[] ids_str = params.split("&");
			List<Integer> ids = new ArrayList<Integer>();
			for (String str : ids_str) {
				ids.add(Integer.valueOf(str));
			}
			Map<String,Object> map = new HashMap<>();
			map.put("list", ids);
			map.put("conState", "已订立");
			map.put("conLatestOpreationTime",conLatestOpreationTime);
			int result1 = contractService.updateStates(map);
			if(result1!=0){
				return "success";
			}
		}else{
			Integer id = Integer.valueOf(params);
			Map<String,Object> map = new HashMap<>();
			map.put("id", id);
			map.put("conState", "已提交");
			map.put("conLatestOpreationTime",conLatestOpreationTime);
			int result2 = contractService.updateState(map);
			if(result2!=0){
				return "success";
			}			
		}
		return "fail";
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 打回合同
	 * @date 2017年12月25日
	 */
	@RequestMapping("/backContract")
	@ResponseBody
	public String backContract(HeyunContract contract){
		System.out.println("id"+contract.getContractId());
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		contract.setConLatestOpreationTime(sdf.format(new Date()));
		contract.setConState("已打回");
		int updateResult = contractService.backContract(contract);
		System.out.println(updateResult+"updateResult");
		if (updateResult!=0) {
			return "success";
		}
		return "fail";
	}
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 打回合同
	 * @date 2017年12月25日
	 */
	@RequestMapping("/checkContract")
	@ResponseBody
	public String checkContract(HeyunContract contract){
		System.out.println("id"+contract.getContractId());
		System.out.println("ConBusinessNumA("+contract.getConBusinessNumA());
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		contract.setConLatestOpreationTime(sdf.format(new Date()));
		contract.setConState("已审核");
		int updateResult = contractService.checkContract(contract);
		System.out.println(updateResult+"updateResult");
		if (updateResult!=0) {
			return "success";
		}
		return "fail";
	}
	
	//***********************************************************************************************
	/**
	 * @return
	 * @author CC
	 * @Description 获取饼状图json数据
	 * @date 2017年12月25日
	 */
	@RequestMapping("/getPieData")
	@ResponseBody
	public PieDataContract getPieData(){
		System.out.println("=============饼图==============");
		List<HeyunContract> list = contractService.listContractType();
		List<String> legend = new ArrayList<String>();
		List<SeriesPieContract> seriesList=new ArrayList<>();
		for (HeyunContract heyunContract : list) {
			System.out.println("类型:"+heyunContract.getConType()+","+"个数:"+heyunContract.getConTypeNum());
			seriesList.add(new SeriesPieContract(heyunContract.getConTypeNum(),heyunContract.getConType()));
		}
		for(SeriesPieContract series: seriesList){
			legend.add(series.getName());
			System.out.println(series.getName());
		}
		PieDataContract pieChartData = new PieDataContract(legend,seriesList);		
		
		return pieChartData;
	}
}
